Conditional Matching Techniques সাধারণভাবে Regular Expressions (Regex)-এ ব্যবহৃত হয়, যেখানে আপনি প্যাটার্নের বিভিন্ন অংশের উপর নির্দিষ্ট শর্ত বা শর্তাবলী প্রয়োগ করতে চান। জাভাতে Regex ব্যবহার করে Conditional Matching করার জন্য কিছু টেকনিক এবং নিয়ম আছে, যা java.util.regex
প্যাকেজে Pattern
এবং Matcher
ক্লাসের মাধ্যমে বাস্তবায়িত করা যায়।
Conditional Matching
এর মাধ্যমে আপনি রেগুলার এক্সপ্রেশনের মধ্যে একটি প্যাটার্নের অংশে শর্ত যোগ করতে পারেন। এটি সাধারণভাবে if-else শর্তের মতো কাজ করে, যেখানে একটি শর্ত সঠিক হলে একটি প্যাটার্ন মিলবে, অন্যথায় অন্য প্যাটার্ন মিলবে।
(a|b)
: এই স্ট্রাকচারটি OR শর্তের মতো কাজ করে, যেখানে a
অথবা b
মিললে সেটা গ্রহণযোগ্য হবে।(?=...)
(Positive Lookahead): এই টেকনিকটি একটি শর্ত যাচাই করে, কিন্তু এটি মিলানোর অংশটিকে ফলস্বরূপ হিসেবে প্রদান করে না।(?!...)
(Negative Lookahead): এটি একটি শর্ত যাচাই করে, যেখানে প্যাটার্নটির পরবর্তী অংশে যে কিছু না থাকবে, সেটি নিশ্চিত করা হয়।(?<=...)
(Positive Lookbehind): এটি সেই শর্তটিকে ম্যাচ করার জন্য যে কোনো প্যাটার্নের পূর্বে কিছু আছে কিনা তা যাচাই করে।(?<!...)
(Negative Lookbehind): এটি প্যাটার্নটির পূর্বে কিছু না থাকার শর্ত যাচাই করে।(a|b)
- OR (অথবা) অপারেটর:এটি ব্যবহার করে আপনি দুটি প্যাটার্নের মধ্যে একটি মেলানোর শর্ত তৈরি করতে পারেন।
import java.util.regex.*;
public class ConditionalMatchingExample {
public static void main(String[] args) {
String text = "apple orange banana";
// Regex pattern to match either "apple" or "orange"
Pattern pattern = Pattern.compile("apple|orange");
Matcher matcher = pattern.matcher(text);
// Find matches
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
Found: apple
Found: orange
ব্যাখ্যা:
apple|orange
: এটি একটি OR শর্ত, যেখানে স্ট্রিং "apple"
অথবা "orange"
মিললে সেটা ম্যাচ করবে।(?=...)
(Positive Lookahead):Positive Lookahead শর্তটি মিলানোর পরবর্তী অংশে কিছু নির্দিষ্ট প্যাটার্ন থাকা নিশ্চিত করবে, তবে সেটি মূল মিলের অংশ হিসেবে ধরে না। এটি যেমন প্যাটার্নের অংশ দেখতে সাহায্য করে, তেমনি মিলানোর পরবর্তী অংশে কিছু থাকতে হবে বা না থাকতে হবে তা যাচাই করে।
import java.util.regex.*;
public class LookaheadExample {
public static void main(String[] args) {
String text = "apple123 orange456 banana789";
// Regex pattern to match a word followed by digits
Pattern pattern = Pattern.compile("\\w+(?=\\d)");
Matcher matcher = pattern.matcher(text);
// Find matches
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
Found: apple
Found: orange
Found: banana
ব্যাখ্যা:
\\w+(?=\\d)
: এখানে \\w+
(যেকোনো অক্ষর) এবং (?=\\d)
শর্তে এটি চেক করবে যে কোনো শব্দের পর সংখ্যা আছে কিনা।apple
, orange
, এবং banana
এর পরে ডিজিট রয়েছে, তাই সেগুলি মিলছে।(?!...)
(Negative Lookahead):Negative Lookahead ব্যবহার করলে আপনি এমন শর্ত তৈরি করতে পারেন যা কিছু না থাকা শর্ত চেক করবে।
import java.util.regex.*;
public class NegativeLookaheadExample {
public static void main(String[] args) {
String text = "apple orange123 banana123";
// Regex pattern to match a word that is NOT followed by digits
Pattern pattern = Pattern.compile("\\w+(?!\\d)");
Matcher matcher = pattern.matcher(text);
// Find matches
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
Found: apple
Found: orange
ব্যাখ্যা:
\\w+(?!\\d)
: এটি এমন শব্দ খুঁজে বের করবে, যার পরে কোন সংখ্যাও নেই। "banana123"
মেলেনি কারণ তার পরে ডিজিট রয়েছে।(?<=...)
(Positive Lookbehind):Positive Lookbehind শর্তটি এমন একটি প্যাটার্নের জন্য কাজ করবে যা একটি নির্দিষ্ট অংশের আগে কিছু থাকে কিনা তা যাচাই করবে।
import java.util.regex.*;
public class LookbehindExample {
public static void main(String[] args) {
String text = "apple123 orange456 banana789";
// Regex pattern to match digits preceded by a word
Pattern pattern = Pattern.compile("(?<=\\w)\\d+");
Matcher matcher = pattern.matcher(text);
// Find matches
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
Found: 123
Found: 456
Found: 789
ব্যাখ্যা:
(?<=\\w)\\d+
: এখানে \\w
(যেকোনো শব্দ অক্ষর) এর পর \\d+
(একাধিক ডিজিট) চেক করা হচ্ছে। এটি শুধুমাত্র এমন ডিজিট খুঁজে পাবে যা কোনো শব্দের পরে রয়েছে।(?<!...)
(Negative Lookbehind):Negative Lookbehind ব্যবহার করলে আপনি এমন শর্ত তৈরি করতে পারেন যা কোনো নির্দিষ্ট অংশের আগে কিছু না থাকার শর্ত চেক করবে।
import java.util.regex.*;
public class NegativeLookbehindExample {
public static void main(String[] args) {
String text = "apple123 orange456 banana789";
// Regex pattern to match digits not preceded by a word
Pattern pattern = Pattern.compile("(?<!\\w)\\d+");
Matcher matcher = pattern.matcher(text);
// Find matches
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
Found: 123
Found: 456
Found: 789
ব্যাখ্যা:
(?<!\\w)\\d+
: এটি শুধু সেগুলোকেই ম্যাচ করবে যেখানে ডিজিটের আগে কোন শব্দ নেই। "apple123"
এবং "orange456"
এর পরে শব্দ রয়েছে, তবে "789"
একটি সংখ্যা এবং তার আগে কোনো শব্দ নেই, তাই এটি ম্যাচ করবে।lookahead
এবং lookbehind
) রেগুলার এক্সপ্রেশন প্যাটার্নে অত্যন্ত শক্তিশালী এবং নমনীয় ফিচার। এগুলি আপনাকে স্ট্রিংয়ের নির্দিষ্ট অংশ বা শর্ত অনুসারে প্যাটার্ন ম্যাচ করতে সক্ষম করে।এই সব শর্তগুলির মাধ্যমে, আপনি আরও শক্তিশালী এবং জটিল টেক্সট ম্যাচিং প্যাটার্ন তৈরি করতে পারবেন।
Read more